AngularJS 中 $timeout 和 $interval 引发的问题
2016年10月19日
0x00
前几天遇到了一个问题,就是在 AngularJS 中 $state 发生改变(或者称之为路由发生变化)不会清空前一个 scope 的内容,具体情景如下图
我在这个 scope 添加了一个间隔十分钟的 $interval,为了方便演示我改成了三秒钟的,当我进行数次在这个页面和其他页面间切换后,发现这个 scope 里的 $interval 重叠了,之前的 $interval 都没有销毁,不仅表现出现了错误,还造成了内存泄漏。
0x01
解决方法是在 scope 触发 $destroy 时或者 $state 触发 $stateChangeSuccess 时手动取消 $interval
var intervalCancel = $interval(func, 3000);
$scope.$on("$destroy", function (e) { //$stateChangeSuccess
if (intervalCancel)
$interval.cancel(intervalCancel);
});
现在看起来就正常了